/**
 * 成绩管理ADT接口
 * 定义了成绩管理的基本操作
 */
public interface GradeManagementInterface {
    /**
     * 判断成绩表是否为空
     * 
     * @return 如果为空返回true，否则返回false
     */
    boolean isEmpty();

    /**
     * 判断成绩表是否已满（仅顺序表有效，链表可返回false）
     * 
     * @return 如果已满返回true，否则返回false
     */
    boolean isFull();

    /**
     * 获取当前学生人数
     * 
     * @return 学生人数
     */
    int size();

    /**
     * 添加学生成绩
     * 
     * @param student 学生对象
     * @return 添加成功返回true，否则返回false
     */
    boolean add(Student student);

    /**
     * 根据学号查找学生
     * 
     * @param studentId 学号
     * @return 找到返回学生对象，否则返回null
     */
    Student findById(String studentId);

    /**
     * 根据索引获取学生
     * 
     * @param index 索引位置
     * @return 学生对象
     */
    Student get(int index);

    /**
     * 根据学号删除学生
     * 
     * @param studentId 学号
     * @return 删除成功返回true，否则返回false
     */
    boolean remove(String studentId);

    /**
     * 对成绩进行排序（按综合测评成绩从高到低）
     */
    void sortByScore();

    /**
     * 评定奖学金
     * 
     * @param firstPrizeRatio  一等奖比例（如0.05表示5%）
     * @param secondPrizeRatio 二等奖比例
     * @param thirdPrizeRatio  三等奖比例
     */
    void evaluateScholarship(double firstPrizeRatio, double secondPrizeRatio, double thirdPrizeRatio);

    /**
     * 显示所有学生成绩信息
     */
    void displayAll();

    /**
     * 显示获奖学生名单
     */
    void displayScholarshipWinners();

    /**
     * 清空所有学生成绩
     */
    void clear();

    /**
     * 合并两个班级的成绩（将另一个班级的学生添加到当前班级）
     * 
     * @param other 另一个班级的成绩管理对象
     */
    void merge(GradeManagementInterface other);
}

